#pragma once

#include <AP_HAL/AP_HAL_Boards.h>

#include <GCS_MAVLink/GCS_config.h>
#if HAL_GCS_ENABLED
#include <GCS_MAVLink/GCS_MAVLink.h>
#endif
#include <AP_SerialLED/AP_SerialLED_config.h>
#include <AP_Scripting/AP_Scripting_config.h>

#ifndef AP_NOTIFY_DISCRETE_RGB_ENABLED
#define AP_NOTIFY_DISCRETE_RGB_ENABLED 0
#endif

#ifndef HAL_DISPLAY_ENABLED
#define HAL_DISPLAY_ENABLED 1
#endif

#ifndef AP_NOTIFY_DRONECAN_LED_ENABLED
#define AP_NOTIFY_DRONECAN_LED_ENABLED HAL_ENABLE_DRONECAN_DRIVERS
#endif

#ifndef AP_NOTIFY_DSHOT_LED_ENABLED
#define AP_NOTIFY_DSHOT_LED_ENABLED HAL_SUPPORT_RCOUT_SERIAL
#endif

#ifndef AP_NOTIFY_VRBOARD_LED_ENABLED
#define AP_NOTIFY_VRBOARD_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_EXTERNALLED_ENABLED
#define AP_NOTIFY_EXTERNALLED_ENABLED 0
#endif

#ifndef AP_NOTIFY_LP5562_ENABLED
#define AP_NOTIFY_LP5562_ENABLED 1
#endif

#ifndef AP_NOTIFY_DISCO_LED_ENABLED
#define AP_NOTIFY_DISCO_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_NAVIGATOR_LED_ENABLED
#define AP_NOTIFY_NAVIGATOR_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_GPIO_LED_3_ENABLED
#define AP_NOTIFY_GPIO_LED_3_ENABLED 0
#endif

// this isn't the second-generation of board LEDs, this is a setup
// where there are two LEDs used:
#ifndef AP_NOTIFY_GPIO_LED_2_ENABLED
#define AP_NOTIFY_GPIO_LED_2_ENABLED 0
#endif

#ifndef AP_NOTIFY_GPIO_LED_1_ENABLED
#define AP_NOTIFY_GPIO_LED_1_ENABLED 0
#endif

#ifndef AP_NOTIFY_GPIO_LED_RGB_ENABLED
#define AP_NOTIFY_GPIO_LED_RGB_ENABLED 0
#endif

#ifndef AP_NOTIFY_RCOUTPUTRGBLEDINVERTED_LED_ENABLED
#define AP_NOTIFY_RCOUTPUTRGBLEDINVERTED_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_RCOUTPUTRGBLEDOFF_LED_ENABLED
#define AP_NOTIFY_RCOUTPUTRGBLEDOFF_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_RCOUTPUTRGBLED_LED_ENABLED
#define AP_NOTIFY_RCOUTPUTRGBLED_LED_ENABLED AP_NOTIFY_RCOUTPUTRGBLEDINVERTED_LED_ENABLED || AP_NOTIFY_RCOUTPUTRGBLEDOFF_LED_ENABLED
#endif

#ifndef AP_NOTIFY_SYSFS_LED_ENABLED
#define AP_NOTIFY_SYSFS_LED_ENABLED 0
#endif

#ifndef AP_NOTIFY_IS31FL3195_ENABLED
#define AP_NOTIFY_IS31FL3195_ENABLED 1
#endif

#ifndef AP_NOTIFY_MAVLINK_PLAY_TUNE_SUPPORT_ENABLED
#define AP_NOTIFY_MAVLINK_PLAY_TUNE_SUPPORT_ENABLED HAL_GCS_ENABLED
#endif

#ifndef AP_NOTIFY_MAVLINK_LED_CONTROL_SUPPORT_ENABLED
#define AP_NOTIFY_MAVLINK_LED_CONTROL_SUPPORT_ENABLED HAL_GCS_ENABLED
#endif

#ifndef AP_NOTIFY_NCP5623_ENABLED
#define AP_NOTIFY_NCP5623_ENABLED 1
#endif

#ifndef AP_NOTIFY_PCA9685_ENABLED
#define AP_NOTIFY_PCA9685_ENABLED 1
#endif

#ifndef AP_NOTIFY_PROFILED_SPI_ENABLED
#define AP_NOTIFY_PROFILED_SPI_ENABLED 0  // requires hwdef to have SPI line
#endif

#ifndef AP_NOTIFY_SCRIPTING_LED_ENABLED
#define AP_NOTIFY_SCRIPTING_LED_ENABLED AP_SCRIPTING_ENABLED
#endif

#ifndef AP_NOTIFY_SERIALLED_ENABLED
#define AP_NOTIFY_SERIALLED_ENABLED AP_SERIALLED_ENABLED
#endif

#ifndef AP_NOTIFY_TOSHIBALED_ENABLED
#define AP_NOTIFY_TOSHIBALED_ENABLED 1
#endif

#ifndef AP_NOTIFY_OREOLED_ENABLED
#define AP_NOTIFY_OREOLED_ENABLED 0
#endif

// Serial LED backends:
#ifndef AP_NOTIFY_PROFILED_ENABLED
#define AP_NOTIFY_PROFILED_ENABLED AP_NOTIFY_SERIALLED_ENABLED
#endif

#ifndef AP_NOTIFY_NEOPIXEL_ENABLED
#define AP_NOTIFY_NEOPIXEL_ENABLED AP_NOTIFY_SERIALLED_ENABLED
#endif

#ifndef AP_NOTIFY_TONEALARM_ENABLED
#define AP_NOTIFY_TONEALARM_ENABLED 0
#endif

#ifndef AP_NOTIFY_BUZZER_ENABLED
#define AP_NOTIFY_BUZZER_ENABLED 0
#endif
